package com.hliushi.spark.sql

import org.apache.spark.sql.SparkSession

/**
 * descriptions:
 *
 * author: Hliushi
 * date: 2021/6/13 10:04
 */
object HiveRead {


  // 1.创建SparkSession
  //    1.1.开启Hive支持            经过这个配置, SparkSQL才会把SQL语句当做HiveSQL俩进行解析
  //    1.2.指定MetaStore的位置
  //    1.3.指定warehouse的位置
  def main(args: Array[String]): Unit = {

    /**
     * 2021年6月13日10:14:11 bug点解决
     * 使用本地spark去读取 集群上面的hive表中数据, 没有指定 .master("")参数, 从而报出了这个异常
     * org.apache.spark.SparkException: A master URL must be set in your configuration
     * #
     * 下面的指定两种warehouse方式都可以的, 那个目录是默认hive数据在hdfs中的位置
     * #
     * #
     * 注意: 当spark应用被 打成Jar包, 使用这个spark-submit命令进行运行, 代码中不能设置 .master()参数
     */
    val spark = SparkSession.builder()
      .master("local[6]")
      .appName("hive_read")
      .enableHiveSupport() // 1.开启Hive支持
      .config("hive.metastore.uris", "thrift://node03:9083") // 2.指定MetaStore的位置
      .config("spark.sql.warehouse.dir", "hdfs://node01:8020/user/hive/warehouse") // 3.指定warehouse的位置
      //.config("spark.sql.warehouse.dir", "hdfs://node01:8020/user/hive/warehouse/test_sql.db/student") // 3.指定warehouse的位置
      .getOrCreate()


    val dataFrame = spark.read.table("test_sql.student")

    dataFrame.show()

    spark.stop()
  }
}